package com.only4play.practice.demo;

import com.huawei.it.eip.ump.client.config.TlsClientConfig;
import com.huawei.it.eip.ump.client.consumer.ConsumeStatus;
import com.huawei.it.eip.ump.client.consumer.Consumer;
import com.huawei.it.eip.ump.client.listener.MessageListener;
import com.huawei.it.eip.ump.common.exception.UmpException;
import com.huawei.it.eip.ump.common.message.Message;

import java.io.UnsupportedEncodingException;

public class ConsumerTest {
    public static void main(String[] args) throws UmpException {
        Consumer consumer = new Consumer();
        consumer.setUmpNamesrvUrls("https://124.71.20.73:1443"); // 设置统一消息平台的服务器地址
        consumer.setAppId("dashi");        // 设置客户端账号
        consumer.setAppSecret("ksnKeWpj5JXqDUXpszoDcA==");     // 设置客户端密钥
        consumer.setTopic("T_zuolin_test");// 设置Topic Name
        consumer.setConsumeOrderly(true);//当需要顺序消费时将此标识设置为true，默认为false
        consumer.setMaxReconsumeTimes(5);//当需要顺序消费可修改此最大重试次数，默认为16次
        consumer.setTags("*");                  // 设置订阅消息的标签，可以指定消费某一类型的消息，默认*表示消费所有类型的消息
        consumer.setEncryptTransport(true);// 设置是否需要加密传输。false（不加密）模式存在安全风险，建议使用true。
        //
        consumer.setTlsClientConfig(TlsClientConfig.builder() //是否使用证书认证，若不需要证书认证请注释下一行代码
                .authServer(true)
                .trustCertPath("C:\\Users\\mengdy\\Desktop\\code\\practice-system\\practice-demo\\src\\main\\resources\\mqs_client_trustcert.pem") //rocketmqClientTrustCert.pem所在目录
                .supportedProtocols("TLSv1.2")
                .supportedCipherSuites("TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256") //支持的加密套件
                .build());

        //下述两行代码设置消费失败重试机制，可选。如果两行代码均不填写，则代表使用默认机制，即默认重试16次，每次重试前等待时长依次为10s、30s、1分、2分、3分、4分、5分、6分、7分、8分、9分、10分、20分、30分、1小时、2小时。
        //consumer.setMaxReconsumeTimes(10); //设置重试次数，如果只有这行参数，则选择系统默认前10次等待时长的重试。
        //consumer.setDelayTimeArray(new DelayTime[] {DelayTime.T_10_SECONDS, DelayTime.T_1_MINUTES, DelayTime.T_1_HOURS});//自定义每次重试时长，{}中参数个数代表重试次数。例如，本例重试3次，3次重试等待时长为10秒、1分、1小时。 如果两行代码同时填写，但设置次数不同，则按最小次数依次取第二行设置的重试时长。例如，本例中第一行设置10次，第二行设置3次，则完全按照第二行的设置；如果第一行设置2次，第二行设置3次，则重试2次，2次重试等待时长为10秒、1分。

        consumer.subscribe(new MessageListener() {
            public ConsumeStatus consume(Message message) throws UnsupportedEncodingException {
                // 消费消息的业务逻辑
                System.out.println("Receive: " + new String(message.getBody(), "UTF-8"));
                System.out.println("Receive getBusinessId: " + message.getBusinessId() + " messageGroupId: " + message.getMessageGroupId() + " meesageId: " + message.getMessageId());
                // 正常接收到消息后，请务必返回CONSUME_SUCCESS，只有在业务处理失败才返回RECONSUME_LATER
                return ConsumeStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();                   // 启动消费者，建议在应用程序关闭时执行consumer.shutdown()关闭此消费者。
    }
}